cmake_minimum_required(VERSION 3.16)

project(udp_test_tool VERSION 0.1 LANGUAGES CXX)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# ----------------- 新增开始 -----------------

# 1. 添加同路径下的头文件目录
#    "${CMAKE_CURRENT_SOURCE_DIR}" 表示 CMakeLists.txt 所在的当前目录
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include) # 如果TRDP头文件在include子目录

# 2. 添加同路径下的库文件目录
#    假设你的 .lib 或 .a 文件存放在项目根目录的 lib 文件夹下
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/lib)

# ----------------- 新增结束 -----------------

# 查找 Qt 模块：必须包含 Widgets、Network（UDP）、Xml（XML解析）
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets Network Xml)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets Network Xml)

# 定义所有源文件（确保包含所有 .h/.cpp/.ui）
set(PROJECT_SOURCES
        main.cpp
        mainwindow.cpp
        mainwindow.h
        mainwindow.ui
        datamodel.h datamodel.cpp
        xmlparser.h xmlparser.cpp
        udpcommunicator.h udpcommunicator.cpp
        trdpcommunicator.h trdpcommunicator.cpp
        testexecution.h testexecution.cpp
        testcasemanager.h testcasemanager.cpp
        testcaseeditor.h testcaseeditor.cpp
        testcaseeditor.ui
        testcasedetaileditor.ui
)

if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    qt_add_executable(udp_test_tool
        MANUAL_FINALIZATION
        ${PROJECT_SOURCES}
        getopt.c vos_utils.c
        getopt.h
    )
else()
    if(ANDROID)
        add_library(udp_test_tool SHARED
            ${PROJECT_SOURCES}
        )
    else()
        add_executable(udp_test_tool
            ${PROJECT_SOURCES}
        )
    endif()
endif()

# 链接所有依赖的 Qt 模块（必须包含 Network 和 Xml）
target_link_libraries(udp_test_tool PRIVATE
    Qt${QT_VERSION_MAJOR}::Widgets
    Qt${QT_VERSION_MAJOR}::Network
    Qt${QT_VERSION_MAJOR}::Xml
    ${CMAKE_CURRENT_SOURCE_DIR}/lib/TRDP_DLL.lib
)

# ----------------- 修改开始 -----------------

# 定义宏定义
# WIN64 通常由 CMake 自动根据目标平台定义，但为了明确可以手动添加
# 其他宏根据你的需求添加
target_compile_definitions(udp_test_tool PRIVATE
    CONFIG_FILE_PATH="./config.xml"
    TESTCASES_FILE_PATH="./testcases.xml"
    WIN64
    MD_SUPPORT=1
    L_ENDIAN
    _CRT_SECURE_NO_WARNINGS
    _WINSOCK_DEPRECATED_NO_WARNINGS
    _DEBUG
    _CONSOLE
)

# ----------------- 修改结束 -----------------

# 目标属性配置（保持不变）
if(${QT_VERSION} VERSION_LESS 6.1.0)
  set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.udp_test_tool)
endif()
set_target_properties(udp_test_tool PROPERTIES
    ${BUNDLE_ID_OPTION}
    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
    MACOSX_BUNDLE TRUE
    WIN32_EXECUTABLE TRUE
)

include(GNUInstallDirs)
install(TARGETS udp_test_tool
    BUNDLE DESTINATION .
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

if(QT_VERSION_MAJOR EQUAL 6)
    qt_finalize_executable(udp_test_tool)
endif()
